/**
 * WordPress Spider Monitor - 简单SPA实现
 * 直接在WordPress页面中工作，无需复杂的路由系统
 */

(function($) {
    'use strict';
    
    // 全局变量
    let currentPage = 'overview';
    let pageCache = {};
    // 简易请求缓存与去重：按 action+payload 做 key，短期缓存 8 秒
    const requestCache = new Map();
    const REQUEST_TTL_MS = 8000;
    let isLoading = false;
    
    // 页面配置
    const pages = {
        'overview': {
            title: '蜘蛛概况',
            action: 'spider_get_overview_page',
            template: 'spider-overview'
        },
        'logs': {
            title: '蜘蛛日志',
            action: 'spider_get_logs_page',
            template: 'spider-logs'
        },
        'list': {
            title: '蜘蛛列表',
            action: 'spider_get_list_page',
            template: 'spider-list'
        },
        'paths': {
            title: '访问路径',
            action: 'spider_get_paths_page',
            template: 'access-paths'
        },
        'articles': {
            title: '文章爬取',
            action: 'spider_get_articles_page',
            template: 'article-crawl'
        },
        'indexing': {
            title: '收录分析',
            action: 'spider_get_indexing_page',
            template: 'indexing-page'
        },
        'push': {
            title: '搜索引擎推送',
            action: 'spider_get_push_page',
            template: 'push-page'
        },
        'settings': {
            title: '设置',
            action: 'spider_get_settings_page',
            template: 'settings-hub'
        },
        'plugin-settings': {
            title: '插件设置',
            action: 'spider_get_plugin_settings_page',
            template: 'settings-page'
        }
    };
    
    // 初始化
    function init() {
        console.log('简单SPA初始化开始');
        
        // 确保ajaxurl存在
        if (typeof ajaxurl === 'undefined') {
            window.ajaxurl = window.ajaxurl || '/wp-admin/admin-ajax.php';
        }
        
        // 绑定导航点击事件
        bindNavigationEvents();
        
        // 绑定WordPress链接处理
        bindWordPressLinks();
        
        // 处理初始路由
        handleInitialRoute();
        
        // 监听hash变化
        $(window).on('hashchange', handleHashChange);
        
        console.log('简单SPA初始化完成');
    }
    
    // 绑定导航事件
    function bindNavigationEvents() {
        $(document).on('click', '.spider-nav-link[href^="#"]', function(e) {
            e.preventDefault();
            const hash = $(this).attr('href').substring(1);
            navigateToPage(hash);
        });
    }
    
    // 绑定WordPress链接处理
    function bindWordPressLinks() {
        $(document).on('click', 'a[href*="admin.php"]', function(e) {
            const href = $(this).attr('href');
            if (!href) return true;
            
            // 对许可证页面强制使用原生跳转，避免任何SPA嵌套
            if (href.indexOf('page=spider-license') !== -1) {
                e.preventDefault();
                e.stopPropagation();
                window.location.href = href; // 原生整页跳转
                return false;
            }
            
            // 其他本插件的admin.php链接也不拦截，交给WP处理
            if (href.includes('wp-spider-monitor') || href.includes('spider-')) {
                return true;
            }
        });
    }
    
    
    // 处理初始路由
    function handleInitialRoute() {
        const hash = window.location.hash.substring(1) || 'overview';
        navigateToPage(hash);
    }
    
    // 处理hash变化
    function handleHashChange() {
        const hash = window.location.hash.substring(1) || 'overview';
        navigateToPage(hash);
    }
    
    // 导航到指定页面
    function navigateToPage(pageId) {
        if (isLoading) {
            console.log('正在加载中，跳过导航');
            return;
        }
        
        if (!pages[pageId]) {
            console.error('未知页面:', pageId);
            return;
        }
        
        if (currentPage === pageId && pageCache[pageId]) {
            console.log('页面已缓存，直接显示:', pageId);
            showPage(pageId);
            return;
        }
        
        console.log('导航到页面:', pageId);
        loadPage(pageId);
    }
    
    // 加载页面
    function loadPage(pageId) {
        const page = pages[pageId];
        if (!page) return;
        
        isLoading = true;
        currentPage = pageId;
        
        // 更新导航状态
        updateNavigationState(pageId);
        
        // 显示加载状态
        showLoading();
        
        const payload = { action: page.action, nonce: wpSpiderMonitor?.nonce || '' };
        const cacheKey = JSON.stringify(payload);
        const now = Date.now();
        // 命中缓存
        const cached = requestCache.get(cacheKey);
        if (cached && (now - cached.time) < REQUEST_TTL_MS) {
            const response = cached.response;
            if (response && response.success) {
                pageCache[pageId] = response.data.content;
                showPage(pageId);
                document.title = page.title + ' - 蜘蛛分析';
                isLoading = false;
                return;
            }
        }

        // 去重：已有同 key 请求在飞，复用其 Promise
        if (cached && cached.promise && (now - cached.time) < REQUEST_TTL_MS) {
            cached.promise.then(handleSuccess, handleError).finally(() => { isLoading = false; });
            return;
        }

        const req = $.ajax({
            url: ajaxurl,
            type: 'POST',
            data: payload,
            success: function(response) {
                if (response.success) {
                    // 缓存页面内容
                    pageCache[pageId] = response.data.content;
                    requestCache.set(cacheKey, { time: Date.now(), response, promise: req });
                    
                    // 显示页面
                    showPage(pageId);
                    
                    // 更新页面标题
                    document.title = page.title + ' - 蜘蛛分析';
                    
                    console.log('页面加载成功:', pageId);
                } else {
                    showError('加载失败: ' + (response.data?.message || '未知错误'));
                    console.error('页面加载失败:', response);
                }
            },
            error: function(xhr, status, error) {
                showError('请求失败: ' + error);
                console.error('AJAX请求失败:', {status, error, response: xhr.responseText});
            },
            complete: function() {
                isLoading = false;
            }
        });
        // 保存 promise 以便并发复用
        requestCache.set(cacheKey, { time: now, response: null, promise: req });

        function handleSuccess(response) {
            if (response && response.success) {
                pageCache[pageId] = response.data.content;
                showPage(pageId);
                document.title = page.title + ' - 蜘蛛分析';
            }
        }
        function handleError(err) {
            console.error(err);
        }
    }
    
    // 显示页面
    function showPage(pageId) {
        const content = pageCache[pageId];
        if (!content) return;
        
        const $container = $('#spider-content-area');
        if ($container.length === 0) {
            console.error('找不到内容容器');
            return;
        }
        
        // 直接替换内容，去除动画延时
        $container.stop(true, true);
        $container.html(content);
        // 执行页面特定的初始化脚本
        executePageScripts(pageId);
    }
    
    // 显示加载状态
    function showLoading() {
        const $container = $('#spider-content-area');
        if ($container.length === 0) return;
        
        $container.html(`
            <div class="spa-loading">
                <div class="loading-spinner"></div>
                <p>正在加载...</p>
            </div>
        `);
    }
    
    // 显示错误
    function showError(message) {
        const $container = $('#spider-content-area');
        if ($container.length === 0) return;
        
        $container.html(`
            <div class="spa-error">
                <h3>加载失败</h3>
                <p>${message}</p>
                <button onclick="location.reload()" class="button button-primary">重新加载</button>
            </div>
        `);
    }
    
    // 更新导航状态
    function updateNavigationState(activePageId) {
        $('.spider-nav-link').removeClass('active');
        $(`.spider-nav-link[href="#${activePageId}"]`).addClass('active');
    }
    
    // 执行页面脚本
    function executePageScripts(pageId) {
        // 根据页面ID执行特定的初始化脚本
        switch (pageId) {
            case 'overview':
                if (typeof initSpiderOverviewPage === 'function') {
                    try {
                        initSpiderOverviewPage();
                    } catch (e) {
                        console.error('初始化蜘蛛概况页面失败:', e);
                    }
                }
                break;
            case 'logs':
                if (typeof initSpiderLogsPage === 'function') {
                    try {
                        initSpiderLogsPage();
                    } catch (e) {
                        console.error('初始化蜘蛛日志页面失败:', e);
                    }
                }
                break;
            // 添加其他页面的初始化
        }
        
        // 触发自定义事件
        $(document).trigger('spiderPageLoaded', [pageId, pages[pageId]]);
    }
    
    // 公共API
    window.SpiderSimpleSPA = {
        navigateTo: navigateToPage,
        getCurrentPage: () => currentPage,
        isPageLoaded: (pageId) => !!pageCache[pageId],
        clearCache: () => { pageCache = {}; },
        preloadPage: (pageId) => {
            if (!pageCache[pageId]) {
                loadPage(pageId);
            }
        }
    };
    
    // 页面加载完成后初始化
    $(document).ready(init);
    
})(jQuery);
